import cv2
import numpy as np

"""
    侵蚀图像边缘为黑色
    扩展图像边缘为白色
"""

# 定义一个函数用于显示图像
def show_img(name, img):
    cv2.imshow(name, img)  # 使用OpenCV的imshow函数显示图像
    cv2.waitKey(0)  # 等待任意键被按下
    cv2.destroyAllWindows()  # 关闭所有OpenCV创建的窗口


# 读取名为'name.jpg'的图片
img = cv2.imread('name.jpg')

# 将图片转换为灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 对灰度图进行二值化处理，阈值为127，使用反向二值化
ret, img_binary = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
# 显示二值化后的图像
show_img('img_binary', img_binary)

# 创建一个3x3的结构元素
kernel = np.ones((3, 3), np.uint8)
# 使用该结构元素对二值化图像进行膨胀操作，迭代1次
dilate = cv2.dilate(img_binary, kernel, iterations=1)
# 显示膨胀后的图像
show_img('dilate', dilate)

# 读取名为'sun.jpg'的图片
img2 = cv2.imread('sun.jpg')

# 将图片转换为灰度图
img_gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
# 对灰度图进行二值化处理，阈值为127，使用反向二值化
ret2, img_binary2 = cv2.threshold(img_gray2, 127, 255, cv2.THRESH_BINARY_INV)
# 显示二值化后的图像
show_img('img_binary', img_binary2)

# 创建一个10x10的结构元素
kernel_ = np.ones((10, 10), np.uint8)
# 使用该结构元素对二值化图像进行膨胀操作，迭代1次
dilate1 = cv2.dilate(img_binary2, kernel_, iterations=1)
# 使用该结构元素对二值化图像进行膨胀操作，迭代2次
dilate2 = cv2.dilate(img_binary2, kernel_, iterations=2)
# 使用该结构元素对二值化图像进行膨胀操作，迭代3次
dilate3 = cv2.dilate(img_binary2, kernel_, iterations=3)

# 将三次膨胀后的图像水平拼接在一起
res = np.hstack((dilate1, dilate2, dilate3))

# 显示拼接后的图像
show_img('sun_dilate', res)
